\subsection{Resoluci\'on del problema}
Dados dos n\'umeros a y b tales que $0 \leq a \leq b$, se buscan los n\'umeros que cumplan $a \leq i^2 \leq b$

\noindent BuscarCuadrados(in a: nat, in b:nat) $\rightarrow$ \naturales\\
contador = i = 0;\\
// se examinan los n\'umeros cuyos cuadrados est\'an entre 0 y a, estos son los que\\
// no forman parte de la soluci\'on\\
         While ($i^2$ $<$ a)\\
         \hspace*{5ex} i++\\
         endWhile\\
// ahora miramos los n\'umeros cuyos cuadrados est\'an entre a y b, con este ciclo\\
// se cubren todos los casos incluyendo el caso donde a es igual a b.\\
         While ($i^2$ $<$ b)\\
         \hspace*{5ex} i++\\
         \hspace*{5ex} contador++\\
         endWhile\\
// Al terminar el segundo ciclo se devuelve en contador la cantidad de cuadrados entre a y b\\
// entre a y b

\subsection{Complejidad temporal}
\noindent Si 0 $\leq i^2 < a \rightarrow 0 \leq i < \lfloor \sqrt{a} \rfloor \rightarrow 0 \leq i \leq \lfloor \sqrt{a} \rfloor$   \\
Si a $\leq i^2 \leq b \rightarrow \lfloor \sqrt{a} \rfloor+1 \leq i < \lfloor \sqrt{b} \rfloor$   \\ \\
Modelo Uniforme \\
$f(n)= 2O(1)+O( \lfloor \sqrt{a}\rfloor)+O(\lfloor \sqrt{b}\rfloor - \lfloor \sqrt{a}\rfloor)$ \\ \\
caso a=b \\ 
$= 2O(1)+O( \lfloor \sqrt{a}\rfloor) \in O(\sqrt{a})$ \\ \\
$caso  a < b$ \\
$\leq 2O(1)+O( \lfloor \sqrt{a}\rfloor)+O(\lfloor \sqrt{b}\rfloor-\lfloor \sqrt{b}\rfloor)$ \\
$=2O(1)+2O( \lfloor \sqrt{b}\rfloor) \in O(\sqrt{b})$\\
$\Longrightarrow f(n) \in O(\lfloor \sqrt{b} \rfloor)$ \\ \\
Modelo Logar\'itmico \\
En este modelo es necesario definir una funci\'on nueva ya que las variables \\ involucradas incluyen el cero en su rango, pero la funci\'on logaritmo tiene como dominio los n\'umeros $\Re>0$
 
\newpage


\subsection{Casos de test}
\begin{enumerate}
\item
El primer caso de test propuesto ser\'a el ejemplo del enunciado del tp. 
Lo consideramos un caso sin mucha rigurosidad, pero que nos permite 
definir, a priori, si nuestro algoritmo funciona o no.\\
Archivo de entrada: test1\\

	  \begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      1 4 & 2\\
      1 10 & 3\\
      0 0 &\\
      \hline
      \end{tabular}\\

Resultado del test: Postivo
\item
El segundo caso de test tendr\'a una l\'{\i}nea donde a y b ser\'an cero. 
Esta situaci\'on est\'a permitida por el enunciado ya que cumple $0 \le a \le b$.
Pero al momento de ejecuci\'on del programa esa l\'{\i}nea no debe ser procesada,
ya que se considera como terminaci\'on del archivo de entrada. 
Lo esperado ser\'{\i}a que no se procese dicha l\'{\i}nea 

Archivo de entrada: test2\\

	  \begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      0 0 &\\
      \hline
      \end{tabular}\\

Resultado del test: Postivo
 
\item
El tercer caso de test contar\'a, tambi\'en, con un l\'{\i}nea, pero en este caso 
lo que nos importa observar es el comportamiento del parametro b, cuando 
este este alcanza el l\'{\i}mite de la representaci\'on. 
Sabemos que en la implementaci\'on tanto a como b son de tipo long int, sin 
embargo el ``juez online'' acepta $0 \le a \le b \le 100000$. Si ingresamos un n\'umero
mayor que 100000 pero que respete el tama\~no de un long int, estaremos seguros 
que pasar\'a el test online.

Archivo de entrada: test3\\

	\begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      1 1000000 & 1000 \\
      0 0 &\\
      \hline
      \end{tabular}\\

Resultado del test: Positivo

\item
El objetivo del cuarto test es probar que nuestro algoritmo funcione 
con un entrada del tipo a = b, la cual chequear\'{\i}a que los l\'{\i}mtes
impuestos por el enunciado de $0 \le a \le b$ se cumplan.\\
Archivo de entrada: test4\\

	\begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      4 4 & 1 \\
      5 5 & 0 \\
      0 0 &\\
      \hline
     \end{tabular}\\

Resultado del test: Postivo

\item
Tambi\'en con el deseo de comprobar que el algoritmo cumpla los l\'{\i}mites 
del enunciado $0\le a\le b$, este test tiene en la entrada a = 0 y b un 
n\'umero cualquiera. Hay que tener en cuenta que un n\'umero cuadrado es aquel
cuya ra\'{\i}z cuadrada es un n\'umero entero.

Archivo de entrada: test5\\

	 \begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      0 4 & 3 \\
      0 10 & 4 \\
      0 0 &\\
      \hline
     \end{tabular}\\

Resultado del test: Postivo
\item
Este \'ultimo test tiene como fin, ver si el algoritmo termina efectivamente 
cuando se lee una l\'{\i}nea "0 0", a pesar de que haya otras l\'{\i}neas de entrada luego. 

Archivo de entrada: test6\\

	 \begin{tabular}{|p{5cm}|p{5cm}|}
      \hline
      Entrada & Salida \\
      \hline
      1 4 & 3 \\
      4 10 & 2 \\
      0 0 &\\
      4 4 &\\
      0 0 &\\
      \hline
     \end{tabular}\\
      
Resultado del test: Postivo
\end{enumerate}
